/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package _util.beans;

import java.io.File;
import java.io.FileNotFoundException;

/**
 *
 * @author adriano
 */
public class FileBean implements Comparable<FileBean> {

    private File file;

    /**
     * Lanca excecao caso o arquivo nao exista.
     *
     * @param path
     * @throws FileNotFoundException
     */
    public FileBean(String path) throws FileNotFoundException {
        this.file = new File(path);
        if (!file.exists()) {
            throw new FileNotFoundException("O arquivo " + path + " não foi encontrado!");
        }
    }

    public File getFile() {
        return file;
    }

    /**
     * @return Tamanho em bytes do arquivo.
     */
    public long getSize() {
        return file.length();
    }

    /**
     * @return Tamanho do arquivo em GB.
     */
    public String getSizeGB() {
        return String.format("%.2f", (double) getSize() / 1073741824);
    }

    /**
     * @return Tamanho do arquivo em KB.
     */
    public String getSizeKB() {
        return String.format("%.2f", (double) getSize() / 1024);
    }

    /**
     * @return Tamanho do arquivo em MB.
     */
    public String getSizeMB() {
        return String.format("%.2f", (double) getSize() / 1048576);
    }

    /**
     * @return Tamanho do arquivo no formato mais adequado de exibicao.
     */
    public String getSizeStr() {
        if (getSize() >= 1073741824) {
            return getSizeGB() + " GB";
        } else if (getSize() >= 1048576) {
            return getSizeMB() + " MB";
        } else if (getSize() >= 1024) {
            return getSizeKB() + " KB";
        }
        return getSize() + " bytes";
    }

    public int compareTo(FileBean o) {
        return new Long(o.getSize()).compareTo(new Long(getSize()));
    }

    @Override
    public String toString() {
        if (getSize() >= 1073741824) {
            return "[" + getSizeStr() + "] " + file.getAbsolutePath();
        } else if (getSize() >= 1048576) {
            return "[" + getSizeStr() + "] " + file.getAbsolutePath();
        } else if (getSize() >= 1024) {
            return "[" + getSizeStr() + "] " + file.getAbsolutePath();
        }
        return "[" + getSizeStr() + "] " + file.getAbsolutePath();
    }
}
